const express = require('express');
const multer = require('multer');
const ffmpeg = require('fluent-ffmpeg');
const app = express();
const upload = multer();
const cors =  require('cors')
const fs = require('fs');

// 跨域
app.use(cors({
    origin: '*', // 允许的源
    methods: 'GET,POST,OPTIONS', // 允许的请求方法
    allowedHeaders: '*', // 允许的请求头
}));

app.post('/process-audio', upload.single('audio'), (req, res) => {
    console.log('req.body',req.body)
    const startTime = parseInt(req.body.startTime || 0);
    const endTime = parseInt(req.body.endTime || 10);
    const audioFile  = req.file;
    if (!req.file) {
        return res.status(400).send('No audio file provided');
    }
    // 可以将音频文件保存到临时文件

    const inputFilePath = `temp-audio-${Date.now()}.mp3`;
    fs.writeFileSync(inputFilePath, audioFile.buffer);
    const outputFilePath = `output-audio-${Date.now()}.mp3`;

    // 创建一个 ffmpeg 实例
    ffmpeg(inputFilePath)
        // 设置截取的起始时间为 0 秒
        .setStartTime(0)
        // 设置截取的时长为 10 秒
        .setDuration(10)
        // 设置输出文件的格式为 MP3
        .toFormat('mp3')
        // 保存处理后的音频到指定的输出文件路径
        .save(outputFilePath)
        // 监听错误事件
        .on('error', (err) => {
            console.error('音频处理过程中出现错误:', err.message);
        })
        // 监听处理完成事件
        .on('end', () => {
            console.log('音频截取成功，文件已保存到:', outputFilePath);

            // 可选：如果你想在处理完成后读取并发送文件
            fs.readFile(outputFilePath, (readErr, data) => {
                if (readErr) {
                    console.error('读取输出文件时出错:', readErr);
                    return;
                }
                res.setHeader('Content-Type', 'application/octet-stream');
                res.setHeader('Content-Disposition', 'attachment; filename=downloaded-file.bin');
                // 这里可以添加将 data 发送到其他地方的逻辑，例如作为 HTTP 响应返回
                res.status(200).send(data);
            });
            // 删除临时文件
            fs.unlinkSync(inputFilePath);
            fs.unlinkSync(outputFilePath);
        });
});

const port = 3000;
app.listen(port, () => {
    console.log(`Server running on port ${port}`);
});
